package com.example.util;

import com.example.entity.vo.ReportDataVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author ZHAO Yudong
 * @Date 2020/11/17 11:07
 * @description：
 */
public class ReportDataVOUtils {
    private volatile static List<ReportDataVO> list;
    private volatile static List<ReportDataVO> list2;

    public static List<ReportDataVO> getData() {
        if (list == null) {
            synchronized (ReportDataVOUtils.class) {
                if (list == null) {
                    //因为如果没有第二个if的话，在当前A线程获得锁的线程后可能有其他B线程也在等待进入这个Class锁
                    //A线程创建锁后创建实例，然后释放锁，之后等待池中的B线程获得锁，然后就会产生创建两个线程的错误情况。
                    list = new ArrayList<>();
                }
            }

        }
        return list;
    }

    public static void add(ReportDataVO data) {
        getData().add(data);
    }


    public static List<ReportDataVO> getData2() {
        if (list2 == null) {
            synchronized (ReportDataVOUtils.class) {
                if (list2 == null) {
                    //因为如果没有第二个if的话，在当前A线程获得锁的线程后可能有其他B线程也在等待进入这个Class锁
                    //A线程创建锁后创建实例，然后释放锁，之后等待池中的B线程获得锁，然后就会产生创建两个线程的错误情况。
                    list2 = new ArrayList<>();
                }
            }

        }
        return list2;
    }

    public static void add2(ReportDataVO data) {
        getData2().add(data);
    }

}
